package com.huaxin.hxmodulestatisticalanalysis.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.huaxin.hxmodulestatisticalanalysis.dto.response.*;
import com.huaxin.hxmodulestatisticalanalysis.models.DeviceDataCollectionWide;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.time.LocalDateTime;
import java.util.List;
import java.util.Map;

@Mapper
public interface DeviceDataCollectionWideMapper extends BaseMapper<DeviceDataCollectionWide> {
    /**
     * 查询最近24小时，每5分钟的电压电流平均值（降采样）
     *
     * @return 趋势数据列表
     */
    List<VoltageCurrentTrendVO> getVoltageCurrentTrendLast24Hours(Map<String, Object> params);

    /**
     * 获取最近1小时的功率对比数据（每分钟平均值），支持家族ID、组织ID、设备ID、站点编号作为可选条件
     *
     * @param params 包含familyId, orgId, deviceId, stationNumber等可选查询参数
     * @return 功率对比数据列表
     */
    List<PowerComparisonVO> getPowerComparisonLastHour(Map<String, Object> params);

    /**
     * 查询功率因数趋势数据
     *
     * @param params 查询参数
     * @return 功率因数趋势数据列表
     */
    List<PowerFactorTrendVO> selectPowerFactorTrend(Map<String, Object> params);

    /**
     * 查询电能累积趋势（按时间分组取最大值）
     *
     * @param params 查询参数（familyId, orgId, deviceId, stationNumber, timeRange, interval）
     * @return 趋势数据列表
     */
    List<EnergyAccumulationTrendVO> selectEnergyAccumulationTrend(Map<String, Object> params);

    /**
     * 获取用电量增量数据
     *
     * @param params 查询参数
     * @return 用电量增量列表
     */
    List<EnergyIncrementVO> getEnergyIncrementData(Map<String, Object> params);

    /**
     * 获取峰谷平数据
     *
     * @param params 搜索参数
     * @return 峰谷平数据列表
     */
    List<PeakValleyFlatStatsVO> selectPeakValleyFlatStats(Map<String, Object> params);

    /**
     * 获取三相不平衡数据
     *
     * @param params 搜索参数
     * @return三相不平衡数据列表
     */
    List<ThreePhaseUnbalanceVO> selectThreePhaseUnbalanceData(Map<String, Object> params);

    /**
     * 获取负载率统计数据
     *
     * @param params 搜索参数
     * @return 负载率统计数据列表
     */
    List<Map<String, Object>> selectDailyLoadRate(Map<String, Object> params);

    /**
     * 获取负载率统计数据
     *
     * @param params 搜索参数
     * @return 负载率统计数据列表
     */
    List<Map<String, Object>> selectPeriodLoadRate(Map<String, Object> params);

    /**
     * 获取负载率统计数据
     *
     * @param params 搜索参数
     * @return 负载率统计数据列表
     */
    List<Map<String, Object>> selectOverloadedDevices(Map<String, Object> params);

    /**
     * 获取日能耗数据
     *
     * @param params 搜索参数
     * @return 日能耗数据列表
     */
    List<Map<String, Object>> selectDailyEnergyConsumption(Map<String, Object> params);

    List<TemperatureHumidityData> getTemperatureHumidityTrend(
            @Param("deviceTypes") List<String> deviceTypes,
            @Param("familyId") String familyId,
            @Param("orgId") String orgId,
            @Param("deviceId") Long deviceId,
            @Param("stationNumber") Long stationNumber);

    AlarmStatusData selectLatestAlarmStatus(Map<String, Object> params);

    /**
     * 获取温度数据形成热力图
     *
     * @param params 搜索参数
     * @return 温度数据列表
     */
    List<TemperatureHeatmapItem> selectTemperatureHeatmapData(Map<String, Object> params);

    /**
     * 获取湿度数据形成热力图
     *
     * @param params 搜索参数
     * @return 湿度数据列表
     */
    List<HumidityHeatmapData> selectHumidityHeatmapData(Map<String, Object> params);

    /**
     * 获取Breaker状态数据
     *
     * @return Breaker状态数据列表
     */

    List<BreakerStatusRecord> selectBreakerStatusHistory(
            @Param("orgId") String orgId,
            @Param("stationNumber") Long stationNumber,
            @Param("deviceId") Long deviceId,
            @Param("breakerField") String breakerField,
            @Param("startTime") LocalDateTime startTime,
            @Param("endTime") LocalDateTime endTime
    );

    /**
     * 根据多种条件查询变压器三相温度趋势数据
     */
    List<ThreePhaseTemperatureDTO> selectTransformerTemperatures(Map<String, Object> params);

    /**
     * 查询多台变压器24小时内三相温度平均值（用于柱状图对比）
     */
    List<Map<String, Object>> selectMultiTransformerAvgTemperatures(
            @Param("deviceTypes") List<String> deviceTypes,
            @Param("orgId") String orgId,
            @Param("stationNumber") Long stationNumber
    );

    /**
     * 查询无线测温主机24小时内三相电缆温度趋势（按5分钟聚合）
     * 支持多设备联合查询
     */
    List<Map<String, Object>> selectWirelessHostCableTempTrend(
            @Param("orgId") String orgId,
            @Param("deviceIds") List<Long> deviceIds,
            @Param("stationNumber") Long stationNumber
    );

    /**
     * 查询无线测温主机电缆温度排名 Top10
     * 按设备取 A/B/C 相最高温度的最大值，降序排列
     */
    List<Map<String, Object>> selectCableTempTop10(
            @Param("orgId") String orgId,
            @Param("stationNumber") Long stationNumber
    );

    /**
     * 查询企业下所有设备的最新采集数据（每台设备取最新一条）
     */
    List<Map<String, Object>> selectLatestByOrgId(@Param("orgId") String orgId);

    // C01: 10kV 电力仪表
    PowerMeterKpiDTO selectPowerMeter10kvKpi(@Param("orgId") String orgId);

    // C02: 0.4kV 电力仪表
    PowerMeterKpiDTO selectPowerMeter04kvKpi(@Param("orgId") String orgId);

    // C03: 微机保护异常数量
    Integer selectMicroRelayAbnormalCount(@Param("orgId") String orgId);

    // C04: 变压器最高温度
    TransformerTempKpiDTO selectTransformerMaxTemp(@Param("orgId") String orgId);

    // C05: 环境告警数量
    Integer selectEnvAlarmCount(@Param("orgId") String orgId);

    // C06: 活跃设备总数
    Integer selectActiveDeviceCount(@Param("orgId") String orgId);
}
